<?php
use AlibabaCloud\SDK\Dysmsapi\V20170525\Dysmsapi;
use AlibabaCloud\SDK\Dysmsapi\V20170525\Models\SendSmsRequest;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use api\app\model\UserModel;
use api\app\model\WalletModel;
use Darabonba\OpenApi\Models\Config;

use think\facade\Db;

    function success($msg = '',$data = '')
    {
        return json([
            'code' => 1,
            'message' => $msg,
            'data' => $data,
        ]);
    }

    function error($msg = '', $data = null)
    {
        return json([
            'code' => 0,
            'message' => $msg,
            'data' => $data,
        ]);
    }

    function createRandStr($length = 8)
    {
        $str = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $randStr = '';
        for ($i = 0; $i <= $length; $i++) {
            $str[mt_rand(0, 35)];
        }
        return $randStr;
    }

function signToken($user_id,$mobile)
{
    $data = [
        'iss' => request()->domain(),
        'itm' => time(),
        'data' => [
            'id' => $user_id,
            'mobile' => $mobile
        ]
    ];
    $key = config('app.jwt_key');
    $token = \Firebase\JWT\JWT::encode($data, $key, 'HS256');
    return $token;
}

    function sendAliSms($mobile)
    {
        $config = new Config([
            // 从阿里云获取
            'accessKeyId' => config('app.aliSms.accessKeyId'),
            'accessKeySecret' => config('app.aliSms.accessKeySecret'),
        ]);

        $config->endpoint = "dysmsapi.aliyuncs.com";
        $client = new Dysmsapi($config);

        // 运行时参数超时设置，仅对使用了该运行时参数实例的请求有效
        $runtimeOptions = new RuntimeOptions();
        // true 忽略证书校验
        $runtimeOptions->ignoreSSL = true;

        $sendSmsRequest = new SendSmsRequest();
        // 手机号
        $sendSmsRequest->phoneNumbers = $mobile;
        // 签名名称
        $sendSmsRequest->signName = '替换为你申请的签名';
        // 模板CODE
        $sendSmsRequest->templateCode = '替换为你申请的模板CODE';
        // 生成随机数作为验证码
        $code = mt_rand(1111, 9999);
        $sendSmsRequest->templateParam = json_encode(['code' => $code]);
        try {
            $response = $client->sendSmsWithOptions($sendSmsRequest, $runtimeOptions);
        } catch (\Exception $exception) {
            halt($exception->getMessage());
        }
        if ($response->body->code == 'OK') {
            Db::name('sms_code')->insert([
                'mobile' => $mobile,
                'code' => $code,
                'send_time' => time()
            ]);
            echo '短信发送成功！';
        }
    }
    //模拟发送
    function sendSms($mobile)
    {
        $code = mt_rand(1111, 9999);

            Db::name('sms_code')->insert([
                'mobile' => $mobile,
                'code' => $code,
                'send_time' => time()
                ]);
            echo $code;

    }

    function checkSmsCode($mobile,$code)
    {
        $log =\api\app\model\SmsModel::where('mobile','=',$mobile)->find();
        if(!$log)
        {
            return false;
        }
        if($log['code'] != $code)
        {
            return false;
        }
        if(time() - $log['send_time'] > 60)
        {
            \api\app\model\SmsModel::where('mobile','=',$mobile)
                ->delete();
            return false;
        }
        \api\app\model\SmsModel::where('mobile','=',$mobile)
            ->delete();
        return true;
    }


function record($user_id)
{
    // 查询用户的流水记录
    $logs = Db::name('wallet')
        ->where('user_id', $user_id)
        ->order('create_time', 'desc')
        ->select();

    if (!$logs) {
        throw new Exception('记录不存在');
    }

    return $logs;
}
function wallet_log($user_id,$money,$before,$after,$reason,$type)
{
    $cord = [
        'user_id' => $user_id,
        'money' => $money,
        'before' => $before,
        'after' => $after,
        'reason' => $reason,
        'type' => $type,
        'create_time' => date('Y:m:d H:i:s')
    ];
    WalletModel::create($cord);

    return success('成功');
}